﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using FotoLab.DomainLayer;
using FotoLab.DomainLayer.Model;
using FotoLab.Models;

namespace FotoLab.Controllers
{
    public class KlantenController : Controller
    {
        private DomainContext db = new DomainContext();

        // GET: Klanten
        //public ActionResult Index()
        //{
        //    return View(db.Klanten.ToList());
        //}

        // GET: Klanten/Details/5
        //public ActionResult Details(Guid? id)
        //{
        //    if (id == null)
        //    {
        //        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        //    }
        //    Klant klant = db.Klanten.Find(id);
        //    if (klant == null)
        //    {
        //        return HttpNotFound();
        //    }
        //    return View(klant);
        //}

        // GET: Klanten/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Klanten/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Id,Naam,Email,Telefoon,FactuurAdres,VerzendAdres")] Klant klant)
        {
            if (ModelState.IsValid)
            {
                // Zoek bestaand factuuradres, zo ja, handmatig settten
                var bestaandAdres = db.Adressen.Find(klant.FactuurAdres.Postcode, klant.FactuurAdres.Huisnummer);
                if (bestaandAdres != null)
                {
                    klant.FactuurAdres = bestaandAdres;
                }

                if (klant.FactuurAdres.Postcode == klant.VerzendAdres.Postcode && klant.FactuurAdres.Huisnummer == klant.VerzendAdres.Huisnummer)
                {
                    klant.VerzendAdres = klant.FactuurAdres;
                } else
                {
                    bestaandAdres = db.Adressen.Find(klant.VerzendAdres.Postcode, klant.VerzendAdres.Huisnummer);
                    if (bestaandAdres != null)
                    {
                        klant.VerzendAdres = bestaandAdres;
                    }
                }

                db.Klanten.Add(klant);
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }

            return View(klant);
        }

        // GET: Klanten/Edit/5
        //public ActionResult Edit(Guid? id)
        //{
        //    if (id == null)
        //    {
        //        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        //    }
        //    Klant klant = db.Klanten.Find(id);
        //    if (klant == null)
        //    {
        //        return HttpNotFound();
        //    }
        //    return View(klant);
        //}

        // POST: Klanten/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        //public ActionResult Edit([Bind(Include = "Naam,Email,Telefoon,FactuurAdres,VerzendAdres")] Klant klant)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        db.Entry(klant).State = System.Data.Entity.EntityState.Modified;
        //        db.SaveChanges();
        //        return RedirectToAction("Index", "Home");
        //    }
        //    return View(klant);
        //}

        // GET: Klanten/Delete/5
        public ActionResult Delete(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Klant klant = db.Klanten.Find(id);
            if (klant == null)
            {
                return HttpNotFound();
            }
            return View(klant);
        }

        // POST: Klanten/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(Guid id)
        {
            Klant klant = db.Klanten.Find(id);
            db.Klanten.Remove(klant);
            db.SaveChanges();
            return RedirectToAction("Index", "Home");
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

    }
}
